import cv2


class PipelineStep:
    def __or__(self, next_step):
        return Pipeline(self, next_step)


class Pipeline:
    def __init__(self, step1, step2):
        self.step1 = step1
        self.step2 = step2

    def __call__(self, input_data):
        output = self.step1(input_data)
        return self.step2(output)

    def __or__(self, next_step):
        return Pipeline(self, next_step)



class Classifier(PipelineStep):
    def __init__(self, model):
        super().__init__()
        self.model = model

    def predict(self, x):
        return f"Classification_{x}"

    def __call__(self, track_results):
        print(f"Classifying: {track_results}")
        return self.predict(track_results)


